'''
    点点点  95%的测试工程师

    web自动化
        1.解决人工重复的执行问题
        2.自动化代替人工来做。
        3.前期条件：
            人工 > 自动化
        自动化流程
        哪种项目适合做自动化：
            1.稳定项目

        前期：
            功能测试用例。
            自动化脚本对功能用例：80~90%
            1.自动化测试范围：
                80~90%
                依据：是否符合做自动化测试
            2.人员准备，周期，工具选型，环境搭建，编写脚本，风险及其把控 --> 《xxxxx系统自动化解决方案》
            3. 按照方案来执行
                周期：2周期：
                    第一周：需求评审，需求分析，
                        脚本编写，调试脚本和增强脚本，使之能进行自动化测试即可。
            4.准备测试数据：xlrd +  pymysql并进行后期的参数化测试
        中期：
            1.编写脚本
            2.增强和调试脚本
            3.执行测试

        后期：
            1.收集执行测试结果
            2.分析bug和定位
            3.脚本要随着版本的迭代进行维护
    工具选择：
        python + Selenium  + 谷歌浏览器(搜狗，360、2345)103,火狐 + chromeDriver.exe    99
        python  + chromDriver.exe +     谷歌(js)

        作业：
            1.把功能测试用例用自动化执行
            2.按模块划分
            3.time.sleep强制等待
                显示等待
                隐式等待
                区别
            4.保证每一条测试用例都是可以重复、独立运行的
                需要用数据的时候通过sql制造

            5.pom思想  封装
                数据、逻辑操作（重复动作）、测试用例

'''
import sys
import os
import time

import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from common1.login_readdata import get_data
from common1.login_operation import *


class TestLogin():
    @pytest.fixture(scope="function", autouse=True)
    def setup_teardown(self):
        service = Service("chromedriver.exe")
        self.driver = webdriver.Chrome(service=service)
        self.driver.get("http://localhost:90")
        self.driver.maximize_window()
        self.driver.implicitly_wait(5)
        yield
        self.driver.quit()

    #正常用户登录
    @pytest.mark.parametrize("username, password, expect", get_data(0))
    def test_normal(self, username, password, expect):
        login_normal(self.driver, username, password)
        print(password)

        result = self.driver.title
        if expect == result:
            print("测试通过")
        else:
            print("测试失败")
            self.driver.save_screenshot("失败截图.png")
        assert expect == result

    #密码错误
    @pytest.mark.parametrize("username, password, expect", get_data(1))
    def test_password_error(self, username, password, expect):
        login_normal(self.driver, username, password)

        result = self.driver.find_element(By.XPATH, "/html/body/div/div/div/form/div[2]/span[1]").text
        if expect == result:
            print("测试通过")
        else:
            print("测试失败")
            self.driver.save_screenshot("失败截图.png")
        assert expect == result

    #错误用户名登陆
    @pytest.mark.parametrize("username, password, expect", get_data(2))
    def test_password_none(self, username, password, expect):
        login_normal(self.driver, username, password)

        # 提取错误提示文本
        result = self.driver.find_element(By.XPATH, "/html/body/div/div/div/form/div[1]/span[1]").text

        if expect == result:
            print("测试通过")
        else:
            print("测试失败")
            self.driver.save_screenshot("失败截图.png")
        assert expect == result


    #正常管理员登录
    @pytest.mark.parametrize("username, password, expect", get_data(3))
    def test_admin_login(self, username, password, expect):
        login_normal(self.driver, username, password)

        result = self.driver.title
        if expect == result:
            print("测试通过")
        else:
            print("测试失败")
            self.driver.save_screenshot("失败截图.png")
        assert expect == result

    #用户名为空
    @pytest.mark.parametrize("username, password, expect", get_data(4))
    def test_admin_login(self, username, password, expect):
        login_normal(self.driver, username, password)

        result = self.driver.find_element(By.XPATH, "/html/body/div/div/div/form/div[1]/span[1]").text
        if expect == result:
            print("测试通过")
        else:
            print("测试失败")
            self.driver.save_screenshot("失败截图.png")
        assert expect == result
















